package account.service;

import account.pojo.StudentAccount;
import account.service.template.StudentAccountTemplate;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import javax.validation.ValidationException;
import java.util.Optional;

public interface StudentAccountService {
    /**
     * 新建学生账号
     *
     * @param uncheckedInput 未经过有效性检查的字段内容
     * @return 新创建的对象
     * @throws ValidationException 检查字段发现错误时抛出异常
     */
    StudentAccount createAccount(StudentAccount uncheckedInput) throws ValidationException;

    StudentAccount createAccount(StudentAccountTemplate template);

    StudentAccount overwriteAccountById(Long id, StudentAccountTemplate template);

    /**
     * 修改学生账号
     *
     * @param uncheckedInput 未经过有效性检查的字段内容
     * @return 返回修改成功的条数。返回值为0表示失败；为1表示成功。
     * @throws ValidationException 检查字段发现错误时抛出异常
     */
    long update(StudentAccount uncheckedInput) throws ValidationException;

    /**
     * 检查ID是否存在
     *
     * @param id 被检查的ID值
     * @return true表示存在
     */
    Boolean existsById(Long id);

    Optional<StudentAccount> findById(Long id);

    Page<StudentAccount> findAll(Pageable pageable);
}
